package com.situ.admin.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.situ.admin.bean.APIResult;
import com.situ.admin.bean.Root;
import com.situ.admin.service.RootService;
import com.situ.admin.utils.TokenUtil;
import com.situ.admin.utils.TokenUtil.Token;

@RestController
@RequestMapping("/api/roots")
@CrossOrigin(origins = { "*" })
public class RootController {

	@Autowired
	private RootService rootService;

	/**
	 * 
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年10月12日 下午3:47:10
	 * @Title: login
	 * @throws:
	 * @类描述-Description:登录
	 */
	@GetMapping
	public APIResult login(Root root, String vercode, String token) {
		APIResult apiResult = new APIResult();
		// 判断输入的验证码是否正确
		Token tkn = TokenUtil.parseToken(token);
		if (tkn.getStatus() == 1) {
			apiResult.setStatus(404);
			apiResult.setMsg("验证码已过期");
			return apiResult;
		}
		if (!vercode.toUpperCase().equals(tkn.getCode())) {
			apiResult.setStatus(404);
			apiResult.setMsg("验证码错误");
			return apiResult;
		}
		// 调用service
		try {
			Root loginRoot = rootService.login(root);
			loginRoot.setPassword(null);
			// 登录成功
			// 保存Token中
			String loginToken = TokenUtil.createToken(loginRoot.getRootname());
			// 返回数据
			apiResult.setStatus(200);
			apiResult.setData(loginRoot);
			apiResult.setMsg(loginToken);
		} catch (Exception e) {
			e.printStackTrace();
			// 登录失败
			// 返回数据
			apiResult.setStatus(404);
			apiResult.setMsg(e.getMessage());

		}
		return apiResult;
	}

	/**
	 * 
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年10月12日 下午5:27:19
	 * @Title: loginout
	 * @throws:
	 * @类描述-Description:退出
	 */
	@DeleteMapping
	public APIResult loginout(HttpSession session) {

		session.invalidate();
		APIResult apiResult = new APIResult();
		apiResult.setStatus(204);

		return apiResult;
	}

	/**
	 * 
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年10月13日 上午8:24:12
	 * @Title: longinEdit
	 * @throws:
	 * @类描述-Description:root的信息修改
	 */
	@PutMapping
	public APIResult longinEdit(Root root) {
		APIResult apiResult = new APIResult();
		try {
			Root loginEdit = rootService.loginEdit(root);
			apiResult.setStatus(201);
			apiResult.setData(loginEdit);
		} catch (Exception e) {
			e.printStackTrace();
			apiResult.setMsg(e.getMessage());
			apiResult.setStatus(404);
		}
		return apiResult;
	}

	@GetMapping("/{token}")
	public APIResult get(@PathVariable("token") String strToken) {
		Token token = TokenUtil.parseToken(strToken);
		Root root = rootService.getByRootName(token.getCode());
		root.setPassword(null);
		return APIResult.ok(root);

	}
}
